﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Printing;
using System.Text;

namespace Caihongtu
{
    class PrintFile: IDisposable
    {
        List<string> listStr;
        System.Drawing.Font printFont = new Font("宋体", 8);
        public PrintFile(List<string> myliststr)
        {
            listStr = myliststr;
        }
        public void Print()
        {
            try
            {
                PrintDocument printDoc = new PrintDocument();
                printDoc.PrintPage += printDoc_PrintPage;
                printDoc.Print();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            string line = null;
            //设置一页的行数=打印区域的高度除以字体高度.
            float pageLine = e.MarginBounds.Height / printFont.GetHeight(e.Graphics);
            //循环打印每一行
            for (int count = 0; count < listStr.Count && ((line = listStr[count]) != null); count++)
            {
                Console.WriteLine("YES");
                float singleLine = e.MarginBounds.Top + (count * printFont.GetHeight(e.Graphics));
                e.Graphics.DrawString(line, printFont, Brushes.Black, 5, singleLine);
            }
            //判断是否继续打印
            //if (line != null)
            //    e.HasMorePages = true;
            //else
                e.HasMorePages = false;
        }

        #region IDisposable Support
        private bool disposedValue = false; // 要检测冗余调用

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    printFont.Dispose();
                    // TODO: 释放托管状态(托管对象)。
                }

                // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
                // TODO: 将大型字段设置为 null。

                disposedValue = true;
            }
        }

        // TODO: 仅当以上 Dispose(bool disposing) 拥有用于释放未托管资源的代码时才替代终结器。
        // ~PrintFile() {
        //   // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
        //   Dispose(false);
        // }

        // 添加此代码以正确实现可处置模式。
        void IDisposable.Dispose()
        {
            // 请勿更改此代码。将清理代码放入以上 Dispose(bool disposing) 中。
            Dispose(true);
            // TODO: 如果在以上内容中替代了终结器，则取消注释以下行。
            // GC.SuppressFinalize(this);
        }
        #endregion
    }
}
